// utils/request.js
import env from '@/config/env'; // 引入环境配置

/**
 * 封装 uni.request
 * @param {Object} options 请求配置
 */
const request = (options) => {
  // 1. 处理请求 URL（拼接环境变量中的 BASE_API）
  if (!options.url.startsWith('http')) {
    options.url = env.BASE_API + options.url;
  }

  // 2. 默认请求配置
  const defaultOptions = {
    method: 'POST',
    header: {
      'Content-Type': 'application/json',
      'Authorization': uni.getStorageSync('token') || '' // 自动携带 Token
    },
	
  };

  // 3. 合并配置
  options = { ...defaultOptions, ...options };

  // 4. 返回 Promise
  return new Promise((resolve, reject) => {
    uni.request({
      ...options,
      success: (res) => {
        // 5. 统一处理 HTTP 状态码
        if (res.statusCode >= 200 && res.statusCode < 300) {
          resolve(res.data); // 请求成功
        } else if (res.statusCode === 401) {
          // Token 过期处理
          uni.navigateTo({ url: '/pages/login/login' });
          reject(new Error('未登录或登录已过期'));
        } else {
          reject(res.data); // 其他错误
        }
      },
      fail: (err) => {
        // 6. 网络错误处理
        uni.showToast({ title: '网络错误', icon: 'none' });
        reject(err);
      }
    });
  });
};

// 7. 快捷方法封装（GET/POST/PUT/DELETE）
export const get = (url, data, options = {}) => {
  return request({ url, data, method: 'GET', ...options });
};

export const post = (url, data, options = {}) => {
  return request({ url, data, method: 'POST', ...options });
};

export const del = (url, data, options = {}) => {
  return request({ url, data, method: 'DELETE', ...options });
};

export const put = (url, data, options = {}) => {
  return request({ url, data, method: 'PUT', ...options });
};


export default request;